<?php

namespace Multilang;

use Pinenut\Form;
use Multilang\TranslateEntities\History;

/**
 * Form Action for Multilang Panel
 */

class PanelFormAction extends \Action
{
	protected static $isPublic = true;
	
	// Указываем view
	protected static $defaultViews = ['#multilang.panelForm'];
	
	// Указываем ClassConfig для формы
	protected static $_panelFormConfig = '\Multilang\PanelFormConfig';
	
	/**
	 * Указываем необходимые неявные параметры
	 * @return multitype:string
	 */
	static function pullParams() {
		return ['sessionId', 'isPost'];
	}
	
	protected function run()
	{

		$langId = $this->request->_langId;
		// отрубаем кеширование если пост-запрос
		if ($this->request->_isPost) {
			$this->response->noCache(true);
		}
	
		// FIXME: это какой-то ёбаный стыд - перестаёт работать позднее статическое связывание
		/// после того как я файнд делаю ниже, поэтому загрузку конфы выношу сюда
		$class = static::$_panelFormConfig;
		$formConfig = $class::get();
	
		$modelName = $formConfig['model'];
	
		$id = $this->request->id;
		$model = TranslateEntities::find($id);

		if (!$model) {
			throw new \Exception($formConfig['entityName'] . ' not found');
		}
	
		$formConfig['htmlOptions']['action'] = $this->url($this->request->action, ['id' => $id]);
	
		$form = new Form ( $this->request->_identity, $this->request->action . $id, $formConfig);

		if ($this->request->_isPost && $this->request->isPartial) {
			$form->process($this->request->params(), true);
			$this->response->content =  $form->render();
			$this->response->noRender(true);
			return;
	
		} else if ($this->request->_isPost) {
			if (!$form->process($this->request->params())) {
				$this->response->form = $form;
				return;
			}
			// уже проверили что всё ок
			$data = $form->getValues();
	
			if (!is_array($model->translateDraft)) {
				$model->translateDraft = [];
			}
			
			$oldTranslate = $model->translateDraft[$langId];
			$newTranslate = $data['translateDraft'];

			History::add($this->request->_identity, 2, $id, $langId, $newTranslate, $oldTranslate);
			
			$model->translateDraft[$langId] = $data['translateDraft'];
			$model->save();
	
			$form->flush();
 			$this->response->noRender(true);
		} else {

			$defaultLangId = \MultilangConfig::getDefaultLanguageCode();

			if (!empty($model->translateDraft[$langId])) 
			{
				$formContent = $model->translateDraft[$langId];
			}
			elseif (!empty($model->translateMain[$defaultLangId]))
			{
				$formContent = $model->translateMain[$defaultLangId];
			}
			elseif (!empty($model->translateDraft[$defaultLangId]))
			{
				$formContent = $model->translateDraft[$defaultLangId];
			}
			else
			{
				$formContent = $model->code;
			}

			$form->process(['translateDraft' => $formContent], false, true);

			$this->response->history = History::find()->where('entityId._ref', $id)->orderReverse("date")->active(false)->all();
		}
		$this->response->cleanCode = $model->code;
		$this->response->form = $form;
		$this->response->name = $formConfig['entityName'];
	}
}